Несколько версий Java, работающих одновременно под Windows - PullRequest
73 голосов
/ 07 ноября 2008

У нас есть пара приложений, работающих на Java 5, и мы хотели бы сейчас добавить приложение на основе Java 6. Могут ли обе версии Java жить вместе под Windows?

Существует ли какая-либо панель управления для установки соответствующей версии Java для различных приложений или каким-либо другим способом настройки, какая версия Java будет использоваться для запуска этого конкретного приложения?

Ответы [ 10 ]

58 голосов
/ 07 ноября 2008

Конечно, вы можете использовать несколько версий Java под Windows. И разные приложения могут использовать разные версии Java. Как запускается ваше приложение? Обычно у вас будет командный файл, в котором есть что-то вроде

java ...

При этом будет выполнен поиск исполняемого файла Java с использованием переменной PATH. Таким образом, если Java 5 находится в начале пути PATH, у вас будут проблемы с запуском приложения Java 6. Затем вы должны изменить командный файл для использования определенной версии Java, например, определив переменную среды JAVA6HOME со значением C:\java\java6 (если в этом каталоге установлена ​​Java 6) и измените пакетный файл, вызвав

%JAVA6HOME%\bin\java ...
11 голосов
/ 07 ноября 2008

Абсолютно возможно установить одновременно несколько версий JRE / JDK. Более того, для этого не нужно делать ничего особенного, поскольку Sun создает для каждого отдельную папку (в разделе Program Files).

Нет панели управления, чтобы проверить, какая JRE работает для каждого приложения. По сути, JRE, который будет работать, будет первым в вашей переменной окружения PATH. Вы можете изменить это, или переменную JAVA_HOME, или создать определенные файлы cmd / bat для запуска приложений, которые вы хотите, каждое с различным JRE в пути.

10 голосов
/ 05 сентября 2012

Я был потрясен неуклюжими идеями CLASSPATH, JAVA_HOME и PATH в Windows, чтобы отслеживать файлы Java. Я попал сюда из-за нескольких JRE, и как довольствоваться этим. Не отказываясь от информации, от парня, который был намного умнее меня, я бы предпочел указать на его статью по этому вопросу, которая для меня решает ее идеально.

Статья: Тед Ньюард: Несколько домов Java: предоставление приложениям Java собственной JRE

С экспоненциальным ростом Java как языка разработки на стороне сервера пришел эквивалент экспоненциальный рост в инструментах разработки Java, средах, платформах и расширениях. К сожалению, не все эти инструменты хорошо работают вместе при одной и той же установке Java VM. Немного требуется среда, совместимая с Servlet 2.1, для некоторых требуется 2.2. Некоторые работают только под JDK 1.2 или выше, некоторые под JDK 1.1 (и не выше). Некоторые требуют пакеты "com.sun.swing" из pre-Swing 1.0 в другие дни требуются имена пакетов "javax.swing".

Хуже того, эта проблема может быть обнаружена даже внутри корпоративного предприятия, так как системы разрабатываются с использованием Java всего шесть месяцев назад может неожиданно "не работать" из-за установки какого-либо расширения Java требуется новым (казалось бы, не связанным) выпуском приложения. Это может усложнить развертывание Java приложений по всей корпорации, и заставляют клиентов задаться вопросом, почему именно через пять лет после начало печально известного беды "Install-this-app-breaks-my-system" началось со схем Microsoft DLL, мы до сих пор не продвинулись намного дальше этого. (На самом деле, новая инициатива .NET на самом деле стремится решить Печально известная проблема «DLL-Ад» только что описана.)

В этом документе описывается, как настроить установку Java таким образом, чтобы данное приложение получало свое собственное приложение, частный, JRE, позволяющий сосуществовать множеству сред Java без привлечения клиентов (или системы) администраторы) душевнобольные ...

2 голосов
/ 19 июня 2015

Или используйте ссылки. Хотя довольно сложно обновлять PATH в работающей среде, легко воссоздать ссылку на новую версию JRE / JDK. Итак:

  • установите различные версии JDK, которые вы хотите использовать
  • создать ссылку на эту папку либо с помощью junction , либо с помощью встроенной команды mklink
  • установить путь к ссылке
  • Если будет использоваться другая версия Java, удалите ссылку, создайте новую, скрипты PATH / JAVA_HOME / hardcoded остаются нетронутыми
2 голосов
/ 07 ноября 2008

Вызов Java с помощью «java -version: 1.5» и т. Д. Должен выполняться с правильной версией Java. (Очевидно, замените 1.5 на версию, которую вы хотите.)

Если Java правильно установлена ​​в Windows, есть пути к vm для каждой версии, хранящейся в используемом реестре, поэтому вам не нужно возиться с версиями среды в Windows.

1 голос
/ 02 апреля 2019

Мы можем установить несколько версий комплектов разработки Java на одном компьютере с помощью SDKMan.

Некоторые замечания по поводу SDKMan:

  1. SDKMan бесплатен и разработан сообществом разработчиков с открытым исходным кодом.
  2. SDKMan написан на bash и требует наличия только curl и zip / unzip программ, присутствующих в вашей системе.
  3. SDKMan может установить около 29 комплектов для разработки программного обеспечения для JVM, таких как Java, Groovy, Scala, Kotlin и Ceylon. Муравей, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x.
  4. Нам не нужно беспокоиться об установке переменных среды _HOME и PATH, поскольку SDKMan обрабатывает их автоматически.

SDKMan может работать на любых платформах UNIX, таких как Mac OSX, Linux, Cygwin, Solaris и FreeBSD, и мы можем установить его с помощью следующих команд:

$ curl -s "https://get.sdkman.io" | bash  
$ source "$HOME/.sdkman/bin/sdkman-init.sh" 

Поскольку SDKMan написан на bash и требует только curl и zip / unzip для присутствия в вашей системе. Вы также можете установить SDKMan на Windows, сначала установив Cygwin или Git Bash для Windows , а затем выполнив указанные выше команды.

Команда sdk list java выдаст нам список версий Java, которые мы можем установить с помощью SDKMan.

Установка Java 8

$ sdk install java 8.0.201-oracle

Установка Java 9

$ sdk install java 9.0.4-open 

Установка Java 11

$ sdk install java 11.0.2-open

Удаление версии Java

Если вы хотите удалить любую версию JDK, например, 11.0.2-open, вы можете сделать это следующим образом:

$ sdk uninstall java 11.0.2-open

Переключение текущей версии Java

Если вы хотите активировать одну версию JDK для всех терминалов и приложений, вы можете использовать команду

sdk default java <your-java_version>

Указанные выше команды также автоматически обновляют переменные PATH и JAVA_HOME. Вы можете прочитать больше в моей статье Как установить несколько версий Java на одном компьютере .

1 голос
/ 17 июля 2009

Если вы используете Java Web Start (вы можете запускать приложения с любого URL, даже из локальной файловой системы), он позаботится о поиске правильной версии для вашего приложения.

1 голос
/ 07 ноября 2008

Должно быть возможным изменение настройки переменной среды JAVA_HOME по-разному для конкретных приложений.

При запуске из командной строки или из пакетного сценария вы можете использовать set JAVA_HOME=C:\...\j2dskXXX для изменения среды JAVA_HOME.

Возможно, вам также потребуется изменить переменную окружения PATH, чтобы использовать правильный двоичный файл Java. Для этого вы можете использовать set PATH=%JAVA_HOME%\bin;%PATH%.

0 голосов
/ 17 августа 2018

Используя Java Web Start, вы можете установить несколько JRE, а затем вызвать то, что вам нужно. На win вы можете сделать .bat файл:

1 - онлайн версия: <<em> your_JRE_version \ bin \ javaws.exe> ​​-localfile -J-Djnlp.application.href = <<em> адрес файла .jnlp .jnlp> -localfile -J "<<em> path_temp_jnlp_file_ .jnlp> "

2 - запуск из кеша: <<em> your_JRE_version \ bin \ javaws.exe> ​​-localfile -J "<<em> path_of_your_local_jnlp_file .jnlp>"

0 голосов
/ 06 апреля 2018

Я использую простой скрипт при запуске jmeter с моей версией Java

<code>
setlocal
set JAVA_HOME="c:\java8"
set PATH=%JAVA_HOME%\bin;%PATH%;
java -version
</code>

иметь Java "портативный" Вы можете использовать этот метод здесь:

https://www.whitebyte.info/programming/java/how-to-install-a-portable-jdk-in-windows-without-admin-rights

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...